local skynet = require "skynet"
local socket = require "skynet.socket"
local log = require "log"


local function echo(id)
    -- 每当 accept 函数获得一个新的 socket id 后，并不会立即收到这个 socket 上的数据。这是因为，我们有时候希望把这个 socket 的操作权转让给别的服务去处理。
    -- 任何一个服务只有在调用 socket.start(id) 之后，才可以收到这个 socket 上的数据。
    socket.start(id);

    while true do
        -- 读取客户端发过来的数据
        local str = socket.read(id);
        if str then
            log.print(str);
            local pos = 0;
            local left = 0;
            local len, left = string.unpack(">I2", str, pos);
            log.info("size is %s", string.len(str));
            log.info("len is %s, left is %s", len, left);
            log.info("size is %s", string.len(str));
            socket.write(id, str);
        else
            socket.close(id);
            return;
        end
    end

end

skynet.start(function()

    log.print("===========Socket test start!==========");
    -- 监听一个端口
    local address = "192.168.33.10";
    local port = 8888;
    local id = socket.listen(address, port);

    log.print("Listen socket: %s:%s", address, port );

    socket.start(id, function(id, addr)
        -- 收到客户端连接或发送消息
        log.print("connet from %s %s", addr, id);

        -- 处理接受到的消息
        echo(id);
    end)
end)

